package com.qf.test;

import com.qf.dao.AccountDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Description: 公用常量
 * @Data: 2022/8/28 18:25
 * @Pacakge: com.qf.test
 * @ClassName: AccountTest03
 * @Author: fan
 * 测试spring是不是单例
 */
public class AccountTest03 {
    public static void main(String[] args) {
        //初始化容器
        ApplicationContext applicationContext
                = new ClassPathXmlApplicationContext("springconfig.xml");
        //获取指定的bean
            AccountDao accountDao01 = (AccountDao) applicationContext.getBean("accountDao");
            AccountDao accountDao02 = (AccountDao) applicationContext.getBean("accountDao");
            AccountDao accountDao03 = (AccountDao) applicationContext.getBean("accountDao");
            System.out.println("accountDao01="+accountDao01);
            System.out.println("accountDao02="+accountDao02);
            System.out.println("accountDao03="+accountDao03);
            System.out.println(accountDao01==accountDao03);
            System.out.println(accountDao02==accountDao03);


        /*
        结果如下:
        accountDao=com.qf.dao.impl.AccountDaoImpl@5702b3b1
        accountDao=com.qf.dao.impl.AccountDaoImpl@5702b3b1
        accountDao=com.qf.dao.impl.AccountDaoImpl@5702b3b1
        accountDao=com.qf.dao.impl.AccountDaoImpl@5702b3b1
        实例相同:表示通过spring获取的bean默认是一个单例的
        如何将单例的bean变为多例
        通过bean标签中的中的scope属性将其修改为多例
        scope属性中的值有:
                singleton:表示单例(默认)
                prototype:表示多例,容器初始化的时候bean不会初始化,而是当需要用的时候才会进行初始化.
                request:在一次HTTP请求中,每个bean对应一个实例,该作用域仅基于Web的Spring的上下文(例如:SpringMVC)才有效
                session:在HTTPSession中,每个bean定义一个实例,该作用域仅基于Web的Spring的上下文(例如:SpringMVC)才有效
                global-session:在全局HTTP Session中,每个bean定义一个实例,该作用仅在Portlet上下文中才有效
         */
    }

}
